// OCyEntropiaSSPDlg.h : header file
//

#pragma once
#include "afxcmn.h"
#include "afxwin.h"
#include <vector>

// COCyEntropiaSSPDlg dialog
class COCyEntropiaSSPDlg : public CDialog
{
// Construction
public:
	COCyEntropiaSSPDlg(CWnd* pParent = NULL);	// standard constructor

// Dialog Data
	enum { IDD = IDD_OCYENTROPIASSP_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support


// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()

protected:
	void	InitializePrecalculatedValues(void);
	// Calcula el termino i-esimo de la secuencia de Kcci (0 0 0 ... 1) Kcci(k) = 1
	long	Kcci	(const int k, const int i);
	// Sumatoria de los primeros i naturales
	long	Gauss	(int i);
	void	ComputeMultiSetWithOneCompliance	(int n, int k, std::vector<long> multiset);
	// Termino base usado en la recursion y definido de manera que S(1) sea 1
	long	A	(int n, int k);
	void	ShowMultiset	(int n, int k, std::vector<long> &multiset);

public:
	afx_msg void OnBnClickedBtRuntest();

protected:
	// Esta lista contiene Los Multisets generados e informa en su primer columna 
	// si cumplen la propiedad
	CListCtrl			m_lsMultisetsResults;
	static bool			s_initialized;
	static std::vector<std::vector<long> >	
						m_precalculatedKccis;
	CSpinButtonCtrl		m_spinN;
	CEdit				m_edN;
	CStatic				m_stN;
public:
	afx_msg void OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult);
};
